package com.bit.cfdi.web.validators.init;

import java.util.Map;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.util.Initiator;

import com.bit.cfdi.web.constants.CFDIConstants;
import com.bit.cfdi.web.domain.Usuario;
import com.bit.cfdi.web.services.UsuarioNegocioService;
import com.bit.cfdi.web.session.SessionUtils;

public class CheckForWizard implements Initiator {

	private Logger log = LogManager.getLogger(this.getClass().getName());

	@Override
	public void doInit(Page page, Map<String, Object> args) throws Exception {
		
		SessionUtils sessionUtils = null;
		Object possibleSessionUtils = args.get(
				CFDIConstants.ServicesKeys.SESSION_UTILS_KEY);
		if(possibleSessionUtils instanceof SessionUtils) {
			sessionUtils = (SessionUtils) possibleSessionUtils;
		}
		if(sessionUtils == null) {
			log.error("FATAL ERROR: SessionUtils not in context");
			Executions.sendRedirect(CFDIConstants.CFDIPages.LOGIN_URL);
			return;
		}
		
		UsuarioNegocioService usuarioNegocioService = null;
		Object possibleUsuarioNegocioService = args.get(
				CFDIConstants.ServicesKeys.USUARIO_NEGOCIO_SERVICE);
		if(possibleUsuarioNegocioService instanceof UsuarioNegocioService) {
			usuarioNegocioService = (UsuarioNegocioService) possibleUsuarioNegocioService;
		}
		if(usuarioNegocioService == null) {
			log.error("FATAL ERROR: UsuarioNegocioService not in context");
			Executions.sendRedirect(CFDIConstants.CFDIPages.LOGIN_URL);
			return;
		}
		
		Usuario usuario = (Usuario) sessionUtils.getFromSession(SessionUtils.USUARIO);
		if(usuario == null) {
			log.warn("User not logged, redirecting to login");
			Executions.sendRedirect(CFDIConstants.CFDIPages.LOGIN_URL);
			return;
		}
		if(!usuarioNegocioService.getNegociosFromUsuario(usuario).isEmpty()) {
			log.warn("User already has business associated, redirecting to home");
			Executions.sendRedirect(CFDIConstants.CFDIPages.HOME_URL);
			return;
		}
	}
	
}
